home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 090 / pctj8311.arc / INBASIC3.BAS < prev    next >
BASIC Source File  |  1984-01-25  |  3KB  |  61 lines

  1. 10 DEFINT A-Z : DEF SEG
  2. 20 ' the BASIC statement will go into the next line
  3. 30 DEF FNF(X)=||'                                                           '
  4. 40 ' setup keyword list
  5. 50 DIM K$[10],K[10]
  6. 60 FOR I=1 TO 10 : READ K$[I],K[I] : NEXT
  7. 70 DATA SGN,132,ABS,134,INT,133,SQR,135,EXP,139,LOG,138
  8. 80 DATA SIN,137,COS,140,TAN,141,ATN,142
  9. 90 ' get string, loop thru characters
  10. 100 INPUT "ENTER YOUR FUNCTION: ";E$ : L=LEN(E$) : X$=""
  11. 110 FOR I=1 TO L : C$=MID$(E$,I,1) : A=ASC(C$)
  12. 120 IF C$="(" OR C$=")" THEN X$=X$+C$ : GOTO 540 ' copy parentheses
  13. 130 ' is it an arithmetic operator?
  14. 140 P=INSTR("+-*/^",C$)
  15. 150 IF P>0 THEN X$=X$+CHR$(232+P) : GOTO 540
  16. 160 IF C$="\" THEN X$=X$+CHR$(244) : GOTO 540
  17. 170 ' is it a name?
  18. 180 IF A<65 OR A>90 THEN 290 ' letter?
  19. 190 N$=C$
  20. 200 FOR J=1 TO LEN(E$)-I : C$=MID$(E$,I+J,1) : A=ASC(C$)
  21. 210 IF NOT (A>64 AND A<91) OR (A>47 AND A<58) OR C$="." THEN 230 'end of name?
  22. 220 N$=N$+C$ : NEXT
  23. 230 I=I+J-1
  24. 240 ' is it a keyword?
  25. 250 FOR J=1 TO 10
  26. 260 IF N$=K$[J] THEN X$=X$+CHR$(255)+CHR$(K[J]) : GOTO 540 ' prefix, keyword
  27. 270 NEXT
  28. 280 X$=X$+N$ : GOTO 540
  29. 290 ' is it a number?
  30. 300 IF (A>47 AND A<58) OR C$="." THEN 320 ' digit or point?
  31. 310 PRINT "INVALID EXPRESSION: "+E$ : STOP
  32. 320 ' get the entire number
  33. 330 N$=C$
  34. 340 FOR J=1 TO LEN(E$)-I : C$=MID$(E$,I+J,1) : A=ASC(C$)
  35. 350 IF NOT (A>47 AND A<58) OR C$="." THEN 370 ' end of number?
  36. 360 N$=N$+C$ : NEXT
  37. 370 I=I+J-1
  38. 380 ' is it well-formed?
  39. 390 N#=VAL(N$) : IF 0<>N# OR N$="0" THEN 410
  40. 400 PRINT "INVALID EXPRESSION: "+E$ : STOP
  41. 410 ' convert to proper form
  42. 420 IF N#<>INT(N#) THEN 480 ELSE N=VAL(N$) ' integer or decimal number?
  43. 430 ' integers
  44. 440 IF 1=LEN(N$) THEN X$=X$+CHR$(N+17) : GOTO 540 ' single decimal digit
  45. 450 IF N>=0 AND N<256 THEN X$=X$+CHR$(15)+CHR$(N) : GOTO 540 ' single byte
  46. 460 IF ABS(N)>32768! THEN 480 ELSE A=VARPTR(N)
  47. 470 X$=X$+CHR$(28)+CHR$(PEEK(A))+CHR$(PEEK(A+1)) : GOTO 540 ' two bytes
  48. 480 ' floating point
  49. 490 N!=VAL(N$)
  50. 500 ' single precision if less than 7 digits, double otherwise
  51. 510 IF LEN(N$)>8 THEN A=VARPTR(N#) : C=8 ELSE A=VARPTR(N!) : C=4
  52. 520 IF C=4 THEN X$=X$+CHR$(29) ELSE X$=X$+CHR$(31) ' floating point prefixes
  53. 530 FOR J=0 TO C-1 : X$=X$+CHR$(PEEK(A+J)) : NEXT
  54. 540 NEXT I
  55. 550 ' find the place to put the expression
  56. 560 A=PEEK(&H30)+256*PEEK(&H31) ' start of program text
  57. 570 FOR I=A TO 32767
  58. 580 IF 124=PEEK(I) AND 124=PEEK(I+1) THEN 600 ELSE NEXT ' find ||
  59. 590 STOP
  60. 600 FOR J=1 TO LEN(X$) : POKE I+J-1,ASC(MID$(X$,J,1)) : NEXT ' store statement
  61.